<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<hr>
ACL

pour chaque action, il y a trois valeurs possible de droit:
-soit allow : donne droit, et force l'accès même si le parent n'avait pas accès
-soit deny : retire le droit, même si le parent avait le droit
-soit rien (pas d'enregistrement en base de données). Cela donne deux cas :
	cas 1 : le role hérite du role parent (si le role est enregistré pour l'action)
	cas 2 : si le parent n'a pas de role enregistré, alors c'est allow
	
Pour tester si l'utilisateur a un role sur une action, deux méthodes : 
1) if($this->_helper->acl->isAllowed('action en question')), cela suppose que la
ressource est le module:controlleur en cours
2) ) if($this->_helper->acl->isAllowed('action en question','module:controlleur'))
cela considère 'module:controlleur' comme étant la ressource en question
<hr>
Si view->title est non null, il sera placé automatiquement dans 
la balise title du header, ainsi que dans le titre de du template
<hr>
Parametres passées dans l'url, et envoyé à partir des formulaires (post, get)
if($this->_hasParam('name')) 
    		$module =  $this->_getParam('name');

if ($this->_request->isPost()){

<hr>
//gestion metadata multilangues
//si l'action n'a pas de metadata, prendre les metadata de son module
//si pas de metadata du module, prendre metadata du fichier de config
<hr>
Envoi de mail

		$mailTemplate = new Wmp_Model_MailTemplate('test');
        $mailTemplate->assign('name','hachim2');
        echo $mailTemplate->getBody('html' par defaut ou 'text'); exit;
 affiche le fichier test.phtml (ou .tpl) se trouvant en priorité dans le 
 repertoir www/templates/template du module/emails/ ou www/emails/
 avec les variables dynamiques passées en parametre (array).
 
 Astuce : pour personnaliser les mails en fonction du "local",
 if(Wmp_Lib::getLocal()=="fr") .....
 
 Astuce : pour retourner du htmlbody ou textbody : if($this->bodyType=="html")...
<hr>
plugin error handler : 
pour activer le action errorAction de ce plugin, il faut que la variable
throwExceptions = false dans le config.ini, et non ="false" etc..
<hr> Request object
$fc = Zend_Controller_Front::getInstance();
		$request	=$fc->getRequest();
		$request->setParam('language', 'en');
		zend_debug::dump($request->getParams()); exit;
donne 
array(5) {
  ["language"] => string(2) "en"
  ["module"] => string(7) "default"
  ["controller"] => string(5) "index"
  ["action"] => string(5) "index"
  ["lkl"] => string(2) "mm"

<hr>
Lorsqu'on est dans un fichier de template, $this designe l'object $view courant.
Donc on peut fair tout ce qu'on veut dans un templates comme si on était dans un fichier de view.phtml
qu'on peut faire dans un view est 
<hr>
Configuration
debug = "1" sur un serveur de test ou développement
debug = "0" sur un serveur de production : ceci est très util pour empecher par exemple un message
d'erreur lorsqu'on l'adresse d'une action protegé en droit, directement.
Au lieu d'affichage une page d'erreur, ça affiche une page vide.


<hr>
<?php echo $this->htmlFlash($this->baseUrl().'/swf.swf',array(
'width' => '260',
'height' => '260'
)); ?>
A noter le passage de parametre. Ne pas oublier de précisier "width" et "height" sinon le
flash risque de ne pas etre affiché
<hr>
Integration d'ajax (voir doc dans zend framework)
Avec jQuery, mettre dans le header du template <?= $this->jQuery(); ?>
puis dans un view : <?= $this->ajaxLink("Show me something",
                    "/hello/world",
                    array('update' => '#content')); ?>
A moins de trouver une autre possibilité, créer un module spécial ajax, et mettre "exit" 
dans tous les fichiers de vues (view) pour ne pas afficher le layout de la vue
<hr>
//Configure les chemin de view helpers, css, js		
//Dans ce plugin j'enregistre dans le registry:
//le nom du template courant, le nom du module, le nom du controlleur et le nom 
//de l'action
//Ce plugin doit etre enregistré avant tous les autres plugins
$frontController->registerPlugin(new Wmp_Controller_Plugin_ViewSetup());

<hr>
URL automatique : $this->view->url(array('module'=>'nom du module', 'controller'=>'nom du controlleur','action'=>'nom de l'action'))
<hr>
Pour activer la redirection de page d'erreur (404), il faut (dans le bootstrap) 
$front->throwExceptions(false)
<hr>
Changement dynamique d'environnement de travail (production, developpement, test):
putenv('ENVIRONMENT=dev'); pour l'environnement de développement 
<hr>Gestion multilingue
je peux mettre les fichiers de langues dans de sous repertoir
(à l'interieur de chaque langue : fr, en, de,... en miniscule les rep des langues)
Exemple pour le fr
	languages
		fr
			login
				nomDufichier_fr.mo
et pour afficher une chaine de langue : 
$translate = Zend_Registry::get('translate');
$translate->_("help")
printf($translate->_("Today is the %1\$s") . "\n", date("d.m.Y"));
// returns all the complete translation data
//pour savoir toutes les chaines de langues
$source = $translate->getMessages();//ou $translate->getMessages('fr_FR');
print_r($source);
<hr>
Toutes les fonctions, classes, helpers de wmp commencerons par wmp
Exemple d'un view helper de traduction : $this->wmpTranslate('String');
ou wmpHtml('dfdf');

<hr>
Plugins
htmlplgins : c'est un module où je stocke des segments de templates dynamiques
	htmlplguns
		views
			scripts
				tables
					sortable.phtml :
						mon tableau triable $this->param1 et $this->param2

utlisation : 
	echo $this->partial('tables/sortable.phtml','htmlplugins',array('param1'=>'parametre1','param2'=>'parametre2'));
						


Parital et partial loop

Les partials sont à utilisées pour des vues complexes (par exemples incluant des swf, css, js...).Sinon préferer plutôt des view helper plugins dans
la library Wmp
<hr>

URL écriture:
<br>
//TODO:Doc rappels
//$action_url = $this->view->url(array('module'=>'admin','controller'=>'templates','action'=>'update'));
<hr>
Utilisation du fichier (des fichiers) de configuration
$config = Zend_Registry::get('config');
$layout->setViewSuffix($config->layouts->suffix);
<hr>
utilisation du cache:<br>
//caching output : memorise la vue dans le cache (fichiers pdf swf, bout de code html etc...)
$cache = Zend_Registry::get('cache');
if(!$cache->start('mypage')) {//tout ce qui est dans ce bloc sera généré à partir du cache (si existe en cache possible, sinon enrgistré),
    $action_url = $this->url(array('module'=>'file','controller'=>'index','action'=>'upload'));

	echo '<form enctype="multipart/form-data" action="'.$action_url.'" method="POST">
		    <input type="hidden" name="MAX_FILE_SIZE" value="100000" />
		        Choose a file to upload: <input name="uploadedfile" type="file" />
		    <br />
		    <input type="submit" value="Upload File" />
		</form>';
    $cache->end();
}
Tout ce qui est en déhors du bloc ne sera pas généré à partir du cache

autre exemple : //caching database query
ça memorise le resultat d'une requette (potentiellement couteuse)
$this->view->cacheflag="";
$cache = Zend_Registry::get('cache');
if(!$testMysqlCache = $cache->load('myresult')) {
	$testMysqlCache = new ModulesTable();
	$testMysqlCache = $testMysqlCache->fetchAll();
	$cache->save($testMysqlCache, 'myresult');
}
else {
	// cache hit! shout so that we know
	$this->view->cacheflag="This one is from cache!\n\n";
}
<hr>
Gestion des templates
<br>
/*Le template d'un module est déterminé par deux valeurs en base de donn�es :
 * 	template, templateDir
 *Template d'un module (priorités) :
 * 		1-Si le template "nomtemplate.phtml" est sp�cifi� (et actif) en base de donn�es pour le module
 * 			alors 
 * 				template="nomtemplate.phtml"
 *				templateDir="valeur templateDir" (= /application/modules/default/ par defaut) 
 * 		2-Sinon, si le template "layout.phtml" existe dans /application/modules/lemodule/views/layouts/
 * 			alors template="/application/modules/lemodule/views/layouts/layout.phtml"
 * 		3-sinon, template="/application/modules/default/views/layouts/layout.phml"	  
 * 
 */
 <hr>
 Session
</body>
</html>